package com.liwy3.job.config;

import com.xxl.job.core.context.XxlJobHelper;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * Copyright © 元气森林（北京）食品科技集团有限公司. All rights reserved.
 *
 * @Description: 分片处理list
 * @author: Crazy4J
 * @date: 2021年12月23日 11:02
 * @version: V1.0
 */
@Slf4j
public abstract class AbstractShardXxlJob<T> {

    /**
     *  开始执行分片后的任务
     * @param task 执行的任务
     */
    protected abstract void processOne(T task);

    /**
     *  对任务列表进行分片处理
     * @param shardList 需要分片的列表
     */
    protected void processShard(List<T> shardList) {

        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        if (shardTotal == 0) {
            log.info("No sharding items");
            return;
        }
        int taskCount = 0;
        for (int i = 0; i < shardList.size(); i++) {
            //分片
            if (shardIndex == i % shardTotal) {
                taskCount++;
                //执行具体任务
                processOne(shardList.get(i));
            }
        }
        log.info("[开始执行分片处理]-当前分片index: {}, 总分片数total: {}, 执行任务size: {}", shardIndex, shardTotal, taskCount);
    }
}
